package org.example.quartz.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class SafeStringUtils {

    private static final ObjectMapper objectMapper = new ObjectMapper();
    //所有的特殊符号
    private static final  String REGEX = "[`~!@#$%^&*+=|{}':;,'\\\\[\\\\]<>/?~！@#￥%……&*+|{}【】‘；：”“’。，、？\n\r\t]";


    /**
     * 将字符串转义为 JSON 安全格式（保留中文不转义）
     */
    public static String escapeForJson(String input) {
        if (input == null) return null;

        try {
            // 使用 Jackson 自动转义
            return objectMapper.writeValueAsString(input);
        } catch (JsonProcessingException e) {
            // 出现异常时返回空字符串或原始字符串，根据业务决定
            return input.replaceAll("[\"\\\\]", "\\\\$0"); // 手动处理基本双引号和反斜杠
        }
    }

    /**
     * 对字符串进行 SQL 安全处理（适用于非预编译语句的场景）
     * 注意：推荐优先使用 PreparedStatement
     */
    public static String escapeForSql(String input) {
        if (input == null) return null;

        return input.replaceAll(REGEX,""); // 双引号转义
    }

    /**
     * HTML 安全转义（防止 XSS 攻击）
     */
    public static String escapeForHtml(String input) {
        if (input == null) return null;

        return input
                .replaceAll(REGEX,"");
    }
    public static String escapeSpecialChars(String input) {
        if (input == null) return null;

        return input.replaceAll(REGEX,"");
    }


    /**
     * 综合安全处理：JSON + SQL 安全
     */
    public static String safeForJsonAndDatabase(String input) {
        return escapeForJson(escapeForSql(input));
    }


    /**
     * 对返回值字符串进行 SQL 安全处理（适用于非预编译语句的场景）
     * 注意：推荐优先使用 PreparedStatement
     */
    public static String returnValuetransfer(String input) {
        if (input == null) return null;

        return input.replace("'", "\\\\''");
    }


}